RxJava-তে Subject হলো একটি বিশেষ ধরনের Observable এবং Observer। এটি বাইমুখী যোগাযোগ প্রদান করে। Subject-এর মাধ্যমে ডাটা এমিট এবং সাবস্ক্রাইব উভয় কাজ করা যায়। এটি একসাথে একটি Observable এবং একটি Observer-এর কাজ সম্পন্ন করে।
Subject-এর কাজ এবং বৈশিষ্ট্য:
- Observable-এর মতো কাজ:
- এটি ডাটা এমিট করে এবং এক বা একাধিক Observer-কে ডাটা সরবরাহ করে।
- Observer-এর মতো কাজ:
- এটি অন্য Observable থেকে ডাটা গ্রহণ করতে পারে।
Subject-এর প্রধান কাজের ধাপ:
- অন্য Observable থেকে ডাটা গ্রহণ।
- সেই ডাটা এক বা একাধিক Observer-এ সরবরাহ।
RxJava-তে বিভিন্ন ধরনের Subject:
RxJava-তে ৪ প্রকারের Subject পাওয়া যায়, প্রতিটির আলাদা আলাদা বৈশিষ্ট্য রয়েছে।
| Subject Type | বৈশিষ্ট্য |
|---|---|
| PublishSubject | শুধুমাত্র সাবস্ক্রাইব করার পর থেকে ডাটা পায়। |
| BehaviorSubject | সর্বশেষ ইমিট হওয়া ডাটাসহ নতুন সাবস্ক্রাইবারদের ডাটা সরবরাহ করে। |
| ReplaySubject | সমস্ত ইমিট হওয়া ডাটাকে রিপ্লে করে। |
| AsyncSubject | Observable সম্পন্ন হওয়ার পর শুধুমাত্র সর্বশেষ ডাটাকে ইমিট করে। |
PublishSubject উদাহরণ:
import io.reactivex.rxjava3.subjects.PublishSubject;
public class PublishSubjectExample {
public static void main(String[] args) {
PublishSubject<String> subject = PublishSubject.create();
// প্রথম সাবস্ক্রাইবার
subject.subscribe(data -> System.out.println("Subscriber 1: " + data));
subject.onNext("Hello");
subject.onNext("RxJava");
// দ্বিতীয় সাবস্ক্রাইবার (এটি শুধুমাত্র পরবর্তী ডাটাগুলো পাবে)
subject.subscribe(data -> System.out.println("Subscriber 2: " + data));
subject.onNext("Subject");
subject.onComplete();
}
}
আউটপুট:
Subscriber 1: Hello
Subscriber 1: RxJava
Subscriber 1: Subject
Subscriber 2: Subject
BehaviorSubject উদাহরণ:
import io.reactivex.rxjava3.subjects.BehaviorSubject;
public class BehaviorSubjectExample {
public static void main(String[] args) {
BehaviorSubject<String> subject = BehaviorSubject.create();
subject.onNext("Initial");
// প্রথম সাবস্ক্রাইবার (সর্বশেষ ডাটা সহ শুরু করবে)
subject.subscribe(data -> System.out.println("Subscriber 1: " + data));
subject.onNext("Hello");
subject.onNext("RxJava");
// দ্বিতীয় সাবস্ক্রাইবার (সর্বশেষ ডাটা সহ শুরু করবে)
subject.subscribe(data -> System.out.println("Subscriber 2: " + data));
subject.onNext("Subject");
subject.onComplete();
}
}
আউটপুট:
Subscriber 1: Initial
Subscriber 1: Hello
Subscriber 1: RxJava
Subscriber 2: RxJava
Subscriber 1: Subject
Subscriber 2: Subject
ReplaySubject উদাহরণ:
import io.reactivex.rxjava3.subjects.ReplaySubject;
public class ReplaySubjectExample {
public static void main(String[] args) {
ReplaySubject<String> subject = ReplaySubject.create();
subject.onNext("Hello");
subject.onNext("RxJava");
// প্রথম সাবস্ক্রাইবার (সমস্ত ডাটা পাবে)
subject.subscribe(data -> System.out.println("Subscriber 1: " + data));
subject.onNext("Subject");
// দ্বিতীয় সাবস্ক্রাইবার (সমস্ত ডাটা পাবে)
subject.subscribe(data -> System.out.println("Subscriber 2: " + data));
subject.onComplete();
}
}
আউটপুট:
Subscriber 1: Hello
Subscriber 1: RxJava
Subscriber 1: Subject
Subscriber 2: Hello
Subscriber 2: RxJava
Subscriber 2: Subject
AsyncSubject উদাহরণ:
import io.reactivex.rxjava3.subjects.AsyncSubject;
public class AsyncSubjectExample {
public static void main(String[] args) {
AsyncSubject<String> subject = AsyncSubject.create();
subject.onNext("Hello");
subject.onNext("RxJava");
subject.onNext("Subject");
// সাবস্ক্রাইবার
subject.subscribe(data -> System.out.println("Subscriber: " + data));
subject.onComplete();
}
}
আউটপুট:
Subscriber: Subject
Subject-এর ব্যবহার ক্ষেত্র:
- Event Broadcasting:
- ডাটা বিভিন্ন অংশে শেয়ার করার জন্য।
- State Management:
- অ্যাপ্লিকেশনের ডাটা স্টেট পর্যবেক্ষণ।
- Multicasting:
- একই ডাটা একাধিক সাবস্ক্রাইবারে পাঠানো।
সংক্ষেপে, RxJava-এর Subject হলো একটি শক্তিশালী টুল যা একসাথে Observable এবং Observer-এর কাজ সম্পন্ন করে। এটি ডাটা শেয়ারিং এবং মাল্টি-কাস্টিং-এর জন্য খুবই কার্যকর।
Subject হলো RxJava এর একটি বিশেষ উপাদান, যা Observable এবং Observer উভয়ের মতো আচরণ করে। এটি একদিকে ডেটা স্ট্রিম গ্রহণ করতে পারে (যেমন একটি Observer), আবার অন্যদিকে সেই ডেটা স্ট্রিমকে একাধিক সাবস্ক্রাইবারের মধ্যে বিতরণ করতে পারে (যেমন একটি Observable)।
Subject কেন প্রয়োজন?
- Multicasting Support:
সাধারণত, একটিObservableডেটা একাধিকObserverএর মধ্যে শেয়ার করতে পারে না। কিন্তুSubjectব্যবহার করে আপনি একই ডেটা স্ট্রিম একাধিকObserverএর মধ্যে শেয়ার করতে পারবেন। - Hot Observable Creation:
Subjectহলো hot observable, যা অর্থ, এটি ডেটা প্রেরণ শুরু করার পর সাবস্ক্রাইবার যুক্ত হলেও শুধুমাত্র বর্তমান ডেটা স্ট্রিম পায়। - Bidirectional Communication:
Subjectডেটা প্রেরণ এবং গ্রহণ উভয় কাজ করতে পারে, যা bidirectional communication এর জন্য উপযুক্ত।
RxJava Subject এর ধরণ
RxJava এ বিভিন্ন প্রকারের Subject রয়েছে। প্রতিটির নির্দিষ্ট আচরণ ও ব্যবহারের ক্ষেত্রে রয়েছে।
১. PublishSubject
- এটি ডেটা স্ট্রিমের শুধুমাত্র বর্তমান এবং পরবর্তী আইটেমগুলোর তথ্য প্রদান করে।
- যখন নতুন
Observerযুক্ত হয়, এটি শুধুমাত্র নতুন ডেটা পায়।
কোড উদাহরণ:
import io.reactivex.rxjava3.subjects.PublishSubject;
public class PublishSubjectExample {
public static void main(String[] args) {
PublishSubject<String> subject = PublishSubject.create();
subject.subscribe(item -> System.out.println("Observer 1: " + item));
subject.onNext("Hello");
subject.onNext("RxJava");
subject.subscribe(item -> System.out.println("Observer 2: " + item)); // নতুন Observer
subject.onNext("World");
}
}
আউটপুট:
Observer 1: Hello
Observer 1: RxJava
Observer 1: World
Observer 2: World
২. BehaviorSubject
- এটি সর্বশেষ
onNext()আইটেম এবং তার পরবর্তী সব আইটেম সরবরাহ করে। - নতুন
Observerসর্বশেষ আইটেম পায় এবং তারপর ডেটা স্ট্রিম অনুসরণ করে।
কোড উদাহরণ:
import io.reactivex.rxjava3.subjects.BehaviorSubject;
public class BehaviorSubjectExample {
public static void main(String[] args) {
BehaviorSubject<String> subject = BehaviorSubject.create();
subject.onNext("Hello");
subject.subscribe(item -> System.out.println("Observer 1: " + item)); // সর্বশেষ আইটেম পায়
subject.onNext("RxJava");
subject.onNext("World");
subject.subscribe(item -> System.out.println("Observer 2: " + item)); // সর্বশেষ আইটেম পায়
}
}
আউটপুট:
Observer 1: Hello
Observer 1: RxJava
Observer 1: World
Observer 2: World
৩. ReplaySubject
- এটি পুরো ডেটা স্ট্রিমকে সংরক্ষণ করে এবং নতুন
Observerএ যোগ দেওয়ার পরে সমস্ত পূর্ববর্তী আইটেম সরবরাহ করে।
কোড উদাহরণ:
import io.reactivex.rxjava3.subjects.ReplaySubject;
public class ReplaySubjectExample {
public static void main(String[] args) {
ReplaySubject<String> subject = ReplaySubject.create();
subject.onNext("Hello");
subject.onNext("RxJava");
subject.subscribe(item -> System.out.println("Observer 1: " + item));
subject.onNext("World");
subject.subscribe(item -> System.out.println("Observer 2: " + item)); // সমস্ত আইটেম পায়
}
}
আউটপুট:
Observer 1: Hello
Observer 1: RxJava
Observer 1: World
Observer 2: Hello
Observer 2: RxJava
Observer 2: World
৪. AsyncSubject
- এটি ডেটা স্ট্রিমের শুধুমাত্র সর্বশেষ আইটেম প্রদান করে, যখন স্ট্রিম সম্পূর্ণ হয়।
onComplete()কল হওয়ার পর এটি ডেটা প্রদান করে।
কোড উদাহরণ:
import io.reactivex.rxjava3.subjects.AsyncSubject;
public class AsyncSubjectExample {
public static void main(String[] args) {
AsyncSubject<String> subject = AsyncSubject.create();
subject.onNext("Hello");
subject.onNext("RxJava");
subject.onNext("World");
subject.subscribe(item -> System.out.println("Observer 1: " + item));
subject.onComplete(); // শেষ ডেটা প্রদান করা হয়
}
}
আউটপুট:
Observer 1: World
৫. UnicastSubject
- এটি একমাত্র একটি
Observerএর জন্য কাজ করে। যদি একাধিকObserverযুক্ত করা হয়, এটি ত্রুটি ছোড়ে।
Subject এর কার্যপ্রণালী
- Observer হিসাবে কাজ করা:
Subjectএর মাধ্যমে ডেটা গ্রহণ করা যায়।- এটি
onNext(),onError(), এবংonComplete()মেথডের মাধ্যমে ডেটা হ্যান্ডেল করে।
- Observable হিসাবে কাজ করা:
- ডেটা স্ট্রিমকে একাধিক
Observerএর মধ্যে বিতরণ করে। subscribe()মেথড ব্যবহার করেObserverযুক্ত করা হয়।
- ডেটা স্ট্রিমকে একাধিক
Subject এর ব্যবহার ক্ষেত্র
- Multicasting Events:
- একাধিক ক্লায়েন্ট বা
Observerকে একই ইভেন্ট পাঠাতে।
- একাধিক ক্লায়েন্ট বা
- Hot Streams:
- ডেটা স্ট্রিম প্রক্রিয়া যেখানে স্ট্রিমের ডেটা সর্বদা পরিবর্তনশীল।
- Manual Data Emission:
onNext()ব্যবহার করে ম্যানুয়ালি ডেটা ইমিট করতে।
সংক্ষেপে
RxJava এর Subject হলো একটি শক্তিশালী টুল, যা Observable এবং Observer উভয়ের মতো আচরণ করে। এটি ডেটা স্ট্রিম শেয়ার করতে, ম্যানুয়ালি ডেটা প্রেরণ করতে, এবং একাধিক সাবস্ক্রাইবারের সাথে যোগাযোগ বজায় রাখতে অপরিহার্য। বিভিন্ন ধরণের Subject এর ব্যবহার নির্ভর করে নির্দিষ্ট সমস্যা সমাধানের উপর।
RxJava-তে Subjects হলো একটি বিশেষ Observable টাইপ, যা একই সাথে Observable এবং Observer হিসাবে কাজ করে। এগুলো ডেটা স্ট্রিম তৈরি ও শেয়ার করার জন্য ব্যবহৃত হয়।
RxJava-তে প্রধানত চার ধরণের Subject রয়েছে:
1. PublishSubject
- ব্যবহার: এটি সাবস্ক্রাইব করার পর থেকে ডেটা স্ট্রিম প্রদান শুরু করে। পূর্ববর্তী ডেটা স্ট্রিম প্রদান করে না।
- উদাহরণ: রিয়েল-টাইম ডেটা ইভেন্ট শেয়ার করা।
import io.reactivex.rxjava3.subjects.PublishSubject;
public class PublishSubjectExample {
public static void main(String[] args) {
PublishSubject<String> subject = PublishSubject.create();
subject.subscribe(item -> System.out.println("Observer 1: " + item));
subject.onNext("Item 1");
subject.onNext("Item 2");
subject.subscribe(item -> System.out.println("Observer 2: " + item));
subject.onNext("Item 3");
subject.onComplete();
}
}
আউটপুট:
Observer 1: Item 1
Observer 1: Item 2
Observer 1: Item 3
Observer 2: Item 3
2. BehaviorSubject
- ব্যবহার: সর্বশেষ প্রেরিত ডেটা স্মরণ রাখে এবং নতুন সাবস্ক্রাইবারদের সেই ডেটা প্রদান করে।
- উদাহরণ: সর্বশেষ স্টেট ধরে রাখা।
import io.reactivex.rxjava3.subjects.BehaviorSubject;
public class BehaviorSubjectExample {
public static void main(String[] args) {
BehaviorSubject<String> subject = BehaviorSubject.create();
subject.onNext("Initial");
subject.subscribe(item -> System.out.println("Observer 1: " + item));
subject.onNext("Item 1");
subject.onNext("Item 2");
subject.subscribe(item -> System.out.println("Observer 2: " + item));
}
}
আউটপুট:
Observer 1: Initial
Observer 1: Item 1
Observer 1: Item 2
Observer 2: Item 2
3. ReplaySubject
- ব্যবহার: সাবস্ক্রাইবারদের কাছে সম্পূর্ণ ডেটা স্ট্রিম পুনরায় প্রদান করে, চাইলেই সাবস্ক্রিপশনের সময় নির্ধারণ করা যায়।
- উদাহরণ: পূর্ববর্তী ইভেন্ট ডেটা শেয়ার করা।
import io.reactivex.rxjava3.subjects.ReplaySubject;
public class ReplaySubjectExample {
public static void main(String[] args) {
ReplaySubject<String> subject = ReplaySubject.create();
subject.onNext("Item 1");
subject.onNext("Item 2");
subject.subscribe(item -> System.out.println("Observer 1: " + item));
subject.onNext("Item 3");
subject.subscribe(item -> System.out.println("Observer 2: " + item));
subject.onComplete();
}
}
আউটপুট:
Observer 1: Item 1
Observer 1: Item 2
Observer 1: Item 3
Observer 2: Item 1
Observer 2: Item 2
Observer 2: Item 3
4. AsyncSubject
- ব্যবহার: ডেটা স্ট্রিমের সর্বশেষ উপাদান শুধুমাত্র প্রদান করে।
- উদাহরণ: শেষের আউটপুট বা রেজাল্ট প্রদান করা।
import io.reactivex.rxjava3.subjects.AsyncSubject;
public class AsyncSubjectExample {
public static void main(String[] args) {
AsyncSubject<String> subject = AsyncSubject.create();
subject.onNext("Item 1");
subject.onNext("Item 2");
subject.onNext("Item 3");
subject.subscribe(item -> System.out.println("Observer 1: " + item));
subject.onComplete();
subject.subscribe(item -> System.out.println("Observer 2: " + item));
}
}
আউটপুট:
Observer 1: Item 3
Observer 2: Item 3
সারণী: Subjects তুলনা
| Subject | ডেটা স্মরণ রাখে? | নতুন সাবস্ক্রাইবারদের ডেটা প্রদান | শেষের ডেটা প্রদান |
|---|---|---|---|
| PublishSubject | না | কেবল নতুন ইভেন্ট | না |
| BehaviorSubject | হ্যাঁ | সর্বশেষ ইভেন্ট এবং নতুন ইভেন্ট | না |
| ReplaySubject | হ্যাঁ | সমস্ত পুরানো এবং নতুন ইভেন্ট | না |
| AsyncSubject | না | না | হ্যাঁ |
কখন কোন Subject ব্যবহার করবেন?
- PublishSubject: রিয়েল-টাইম ইভেন্ট শেয়ারিং।
- BehaviorSubject: সর্বশেষ ডেটা ধরে রাখা প্রয়োজন হলে।
- ReplaySubject: সমস্ত ইভেন্ট পুনরায় শেয়ার করতে চাইলে।
- AsyncSubject: কেবলমাত্র চূড়ান্ত আউটপুট প্রয়োজন হলে।
আপনার যদি আরও বিস্তারিত প্রয়োজন হয়, জানাবেন! 😊
RxJava-তে Cold Observable এবং Hot Observable ডেটা স্ট্রিমের দুইটি ভিন্ন ধরন। এগুলো asynchronous ডেটা emission পরিচালনা করে ভিন্ন উপায়ে। এর সাথে, Subject ব্যবহার করে Observables এবং Observers-এর মধ্যে ব্রিজ তৈরি করা যায়।
Cold Observable
- Cold Observables subscriber-এর জন্য আলাদা data stream তৈরি করে।
- Data emission তখনই শুরু হয় যখন কোনো subscriber Observable-এ
subscribeকরে। - প্রতিটি subscriber একই data stream পুনরায় পায়।
উদাহরণ: Cold Observable
import io.reactivex.rxjava3.core.Observable;
public class ColdObservableExample {
public static void main(String[] args) {
Observable<Integer> coldObservable = Observable.just(1, 2, 3);
// প্রথম subscriber
coldObservable.subscribe(item -> System.out.println("Subscriber 1: " + item));
// দ্বিতীয় subscriber
coldObservable.subscribe(item -> System.out.println("Subscriber 2: " + item));
}
}
Output:
Subscriber 1: 1
Subscriber 1: 2
Subscriber 1: 3
Subscriber 2: 1
Subscriber 2: 2
Subscriber 2: 3
বৈশিষ্ট্য:
- প্রতিটি subscriber ডেটা emission পুনরায় শুরু করে।
- API calls, database queries ইত্যাদিতে ব্যবহৃত হয়।
Hot Observable
- Hot Observables subscriber-এমিশনের সময়ই ডেটা স্ট্রিম তৈরি করে।
- একটি shared data stream ব্যবহার করা হয়।
- নতুন subscriber আগে emitted ডেটা পায় না, কেবল নতুন ডেটা পায়।
উদাহরণ: Hot Observable (Subject ব্যবহার করে)
import io.reactivex.rxjava3.subjects.PublishSubject;
public class HotObservableExample {
public static void main(String[] args) {
PublishSubject<Integer> hotObservable = PublishSubject.create();
// প্রথম subscriber
hotObservable.subscribe(item -> System.out.println("Subscriber 1: " + item));
// ডেটা emission শুরু
hotObservable.onNext(1);
hotObservable.onNext(2);
// দ্বিতীয় subscriber যোগ করা
hotObservable.subscribe(item -> System.out.println("Subscriber 2: " + item));
hotObservable.onNext(3);
hotObservable.onComplete();
}
}
Output:
Subscriber 1: 1
Subscriber 1: 2
Subscriber 1: 3
Subscriber 2: 3
বৈশিষ্ট্য:
- নতুন subscriber পূর্বে emitted ডেটা পায় না।
- UI events, sensor data ইত্যাদির জন্য উপযুক্ত।
Subject-এর ভূমিকা
Subject RxJava-তে একটি বিশেষ কম্পোনেন্ট, যা Observable এবং Observer দুটোরই বৈশিষ্ট্য বহন করে। এটি Hot Observable তৈরিতে ব্যবহৃত হয়।
প্রধান প্রকারের Subject
- PublishSubject
- শুধুমাত্র নতুন subscribers-এর জন্য নতুন emitted ডেটা পাঠায়।
- BehaviorSubject
- সর্বশেষ emitted ডেটা এবং এর পরে নতুন ডেটা পাঠায়।
- ReplaySubject
- পূর্বে emitted সমস্ত ডেটা এবং পরবর্তী নতুন ডেটা পাঠায়।
- AsyncSubject
- শুধুমাত্র শেষ emitted ডেটা পাঠায় (completion signal-এর পরে)।
উদাহরণ: BehaviorSubject
import io.reactivex.rxjava3.subjects.BehaviorSubject;
public class BehaviorSubjectExample {
public static void main(String[] args) {
BehaviorSubject<String> behaviorSubject = BehaviorSubject.create();
// প্রথম subscriber যোগ করা
behaviorSubject.subscribe(item -> System.out.println("Subscriber 1: " + item));
behaviorSubject.onNext("A");
behaviorSubject.onNext("B");
// দ্বিতীয় subscriber যোগ করা
behaviorSubject.subscribe(item -> System.out.println("Subscriber 2: " + item));
behaviorSubject.onNext("C");
behaviorSubject.onComplete();
}
}
Output:
Subscriber 1: A
Subscriber 1: B
Subscriber 2: B
Subscriber 1: C
Subscriber 2: C
Cold vs Hot Observable তুলনা
| বৈশিষ্ট্য | Cold Observable | Hot Observable |
|---|---|---|
| Data Emission | Subscribe করার পর শুরু হয়। | নিরবচ্ছিন্নভাবে emission হয়। |
| Subscribers | প্রতিটি subscriber নতুন স্ট্রিম পায়। | একই স্ট্রিম শেয়ার করে। |
| Example Use Cases | API calls, database queries। | UI events, sensor data। |
উপসংহার
- Cold Observable: প্রতিটি subscriber-এর জন্য ডেটা পুনরায় প্রদান করে।
- Hot Observable: নতুন subscriber-এর জন্য কেবল নতুন emitted ডেটা প্রদান করে।
- Subject ব্যবহার করে Observables-কে Hot করা সম্ভব, এবং এটি Observables এবং Observers-এর মধ্যে ব্রিজ হিসেবে কাজ করে।
আপনার প্রয়োজন অনুযায়ী Cold বা Hot Observables নির্বাচন করে ডেটা স্ট্রিম পরিচালনা করুন।
Subject RxJava-র একটি গুরুত্বপূর্ণ component যা Observable এবং Observer উভয়ের মতো কাজ করে। এটি একই সময়ে data emit (প্রকাশ) এবং consume (গ্রহণ) করতে পারে।
Subject-এর ধরন
RxJava-তে বিভিন্ন প্রকারের Subject রয়েছে, এবং প্রতিটির নিজস্ব ব্যবহার ক্ষেত্রে আলাদা বৈশিষ্ট্য থাকে। প্রধান Subject-গুলো হল:
- PublishSubject
- BehaviorSubject
- ReplaySubject
- AsyncSubject
1. PublishSubject
PublishSubject শুধুমাত্র subscribe হওয়ার পরবর্তী ডেটা emit করে। এটি পূর্ববর্তী ডেটা সংরক্ষণ করে না।
উদাহরণ:
import io.reactivex.subjects.PublishSubject;
public class PublishSubjectExample {
public static void main(String[] args) {
PublishSubject<String> subject = PublishSubject.create();
// প্রথম Observer
subject.subscribe(item -> System.out.println("Observer 1: " + item));
subject.onNext("Hello");
subject.onNext("RxJava");
// দ্বিতীয় Observer (পরে subscribe হয়েছে)
subject.subscribe(item -> System.out.println("Observer 2: " + item));
subject.onNext("Subject");
subject.onComplete();
}
}
আউটপুট:
Observer 1: Hello
Observer 1: RxJava
Observer 1: Subject
Observer 2: Subject
2. BehaviorSubject
BehaviorSubject সর্বশেষ emit হওয়া ডেটা সংরক্ষণ করে এবং নতুন subscribers-দের সেটি প্রদান করে।
উদাহরণ:
import io.reactivex.subjects.BehaviorSubject;
public class BehaviorSubjectExample {
public static void main(String[] args) {
BehaviorSubject<String> subject = BehaviorSubject.create();
subject.onNext("Initial");
// প্রথম Observer
subject.subscribe(item -> System.out.println("Observer 1: " + item));
subject.onNext("Hello");
subject.onNext("RxJava");
// দ্বিতীয় Observer (পরে subscribe হয়েছে)
subject.subscribe(item -> System.out.println("Observer 2: " + item));
subject.onNext("Subject");
subject.onComplete();
}
}
আউটপুট:
Observer 1: Initial
Observer 1: Hello
Observer 1: RxJava
Observer 1: Subject
Observer 2: RxJava
Observer 2: Subject
3. ReplaySubject
ReplaySubject সমস্ত emit হওয়া ডেটা সংরক্ষণ করে এবং নতুন subscribers-দের সব ডেটা প্রদান করে।
উদাহরণ:
import io.reactivex.subjects.ReplaySubject;
public class ReplaySubjectExample {
public static void main(String[] args) {
ReplaySubject<String> subject = ReplaySubject.create();
subject.onNext("Initial");
subject.onNext("Hello");
// প্রথম Observer
subject.subscribe(item -> System.out.println("Observer 1: " + item));
subject.onNext("RxJava");
// দ্বিতীয় Observer (পরে subscribe হয়েছে)
subject.subscribe(item -> System.out.println("Observer 2: " + item));
subject.onNext("Subject");
subject.onComplete();
}
}
আউটপুট:
Observer 1: Initial
Observer 1: Hello
Observer 1: RxJava
Observer 1: Subject
Observer 2: Initial
Observer 2: Hello
Observer 2: RxJava
Observer 2: Subject
4. AsyncSubject
AsyncSubject শুধুমাত্র শেষ emit হওয়া ডেটা প্রদান করে, এবং onComplete() কল করার পর এটি সক্রিয় হয়।
উদাহরণ:
import io.reactivex.subjects.AsyncSubject;
public class AsyncSubjectExample {
public static void main(String[] args) {
AsyncSubject<String> subject = AsyncSubject.create();
subject.onNext("Initial");
subject.onNext("Hello");
subject.onNext("RxJava");
// প্রথম Observer
subject.subscribe(item -> System.out.println("Observer 1: " + item));
subject.onNext("Subject");
subject.onComplete();
// দ্বিতীয় Observer (onComplete এর পরে subscribe হয়েছে)
subject.subscribe(item -> System.out.println("Observer 2: " + item));
}
}
আউটপুট:
Observer 1: Subject
Observer 2: Subject
উপসংহার
RxJava-র Subject-গুলো বিভিন্ন প্রোগ্রামিং পরিস্থিতিতে ব্যবহারের জন্য অত্যন্ত উপযোগী।
| Subject প্রকার | ব্যবহার |
|---|---|
| PublishSubject | শুধুমাত্র subscribe হওয়ার পর emit হওয়া ডেটা প্রদান করে। |
| BehaviorSubject | সর্বশেষ emit হওয়া ডেটা সংরক্ষণ করে এবং নতুন subscribers-দের সেটি প্রদান করে। |
| ReplaySubject | সমস্ত emit হওয়া ডেটা সংরক্ষণ করে এবং নতুন subscribers-দের প্রদান করে। |
| AsyncSubject | শুধুমাত্র শেষ emit হওয়া ডেটা প্রদান করে। |
প্রতিটি Subject নির্দিষ্ট পরিস্থিতিতে ব্যবহার করলে data streams পরিচালনা আরও কার্যকর হয়।
Read more